#include "app_runner.h"
#include "app_router.h"
#include "app_task.h"
#include "app_serial.h"
#include "thirdparty/log.c/log.h"
#include <signal.h>

/**
 * @brief 信号处理回调函数
 *
 * @param sig 触发的信号
 */
void app_runner_close(int sig)
{
    log_info("Closing...");
    if (sig == SIGINT || sig == SIGTERM)
    {
        // 关闭
        app_router_close();
        app_task_close();
    }
    // log_info("Closed");
}

void app_runner_run()
{
    SerialDevice serial_device;
    // 必要的初始化工作
    app_task_init(4);
    app_router_init();

    // CTRL + C触发
    signal(SIGINT, app_runner_close);
    signal(SIGTERM, app_runner_close);

    // 新建设备并注册到路由
    app_serial_init(&serial_device, "/dev/ttyS2");
    app_serial_setConnectionType(&serial_device, BLUETOOTH);
    app_router_resigerDevice((Device *)&serial_device);

    // 等待子线程结束
    app_task_wait();
    // log_info("App closed");
}